#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}return x;
}const int N=2e5+5,M=1e6+5;
int T,n,b[M],m;
long long ans[N],cnt=0;
struct node{
	int l,r,v;
}a[N];
bool cmp(node x,node y){return x.l<y.l;}
int main(){
	freopen("color.in","r",stdin);
	freopen("color.out","w",stdout);
	T=read();
	while(T--){
		memset(b,0,sizeof(b));m=0;cnt=0;
		memset(ans,0,sizeof(ans));
	//	memset(a,0,sizeof(a));
		n=read();
		for(int i=1;i<=n;i++){
			int x=read();
			if(b[x]){
				if(b[x]+1==i)cnt+=x;
				else{
					m++;
					a[m].l=b[x];
					a[m].r=i;
					a[m].v=x;
				}
			}b[x]=i;
		}sort(a+1,a+m+1,cmp);
		for(int i=m;i>=1;i--){
			int k=0;
			for(int j=i+1;j<=m;j++)if(a[j].l+1>=a[i].r){k=j;break;}
			ans[i]=max(ans[i+1],a[i].v+ans[k]);
		}printf("%lld\n",ans[1]+cnt);
//		cout<<cnt<<endl;
//		for(int i=1;i<=m;i++)cout<<ans[i]<<' ';
//		cout<<endl;
	}
	return 0;
}
